package com.jt.redis;

import redis.clients.jedis.Jedis;

import java.util.Map;

/**
 * @author tang
 * @data 2021/10/11
 * @apiNode
 *
 * 购物车系统简易实现
 * 需求:
 * 1) 向购物车添加商品
 * 2) 修改购物车商品数量
 * 3) 查看购物车商品
 * 4) 清空购物车商品
 * 存储设计:
 * 1) mysql(优势是持久性，读写速度会差一点)
 * 2) redis(优势是性能，持久性相对MySQL会差一些，假如性能要求高于数据的存储安全，可以存储到redis)
 */
public class CartDemo01 {
    static final String host = "192.168.126.129";
    static final int port = 6379;

    public static void main(String[] args) {
        String userId = "1001";
        //1.购买商品时将商品信息添加到购物车
        doAddCart(userId,"201",2);
        doAddCart(userId,"202",1);
        doAddCart(userId,"203",3);
        //2.允许修改购物车商品数量
        doAddCart(userId, "202", 3);
        //3.可以查看购物车商品信息
        Map<String, String> map = doViewCart(userId);
        System.out.println(userId+" 的购物车里面有 : "+map);
        //4.可以清空购物车
        doDelCart(userId, "201");
        map = doViewCart(userId);
        System.out.println(userId+" 的购物车里面有 : "+map);
    }

    /**
     * 向购物车添加商品
     * @param userId
     * @param productId
     * @param num
     */
    public static void doAddCart(String userId,String productId,int num){
        //1.创建jedis对象
        Jedis jedis = new Jedis(host, port);
        //2.基于hash结构存储商品信息
        jedis.hincrBy("cart:"+userId, productId, num);
        //3.释放资源
        jedis.close();
    }

    /**
     * 查看购物车商品信息
     * @param userId
     */
    public static Map<String, String> doViewCart(String userId){
        //1.创建jedis对象
        Jedis jedis = new Jedis(host, port);
        //2.查看购物车信息
        Map<String, String> map = jedis.hgetAll("cart:"+userId);
        //3.释放资源
        jedis.close();
        //4.返回购物车内容
        return map;
    }

    /**
     * 删除购物车某个商品
     * @param userId
     * @param productIds
     */
    public static void doDelCart(String userId,String... productIds){
        //1.创建jedis对象
        Jedis jedis = new Jedis(host, port);
        //2.清除指定商品
        jedis.hdel(userId, productIds);
        //3.释放资源
        jedis.close();
    }
}
